#include "const.h"
#include <iostream>

using namespace std;

int main() {
  cout << "main()" << endl;
  valueConst();
  classConst();
}

void valueConst() {
  // 常量定义
  const int a = 10;
  int const b = 20;

  int x = 10, y = 20, z = 30;
  // 指向的地址可以变，但指向的值不能变。
  const int *p1 = &x;
  int const *p2 = &x;
  p1 = &y;
  // 指向的地址不能变，但指向的值可以变。
  int *const p3 = &x;
  // Wrong: p3 = &y;
  *p3 = 30;
  // p2是一个常量指针，指向一个常量整数，不能修改p2的值，也不能通过p2修改*p2的值
  const int *const p4 = &y;
}

void classConst() {
  cout << "classConst()" << endl;
  auto *ptr = new A();
  cout << "ptr = " << ptr->getValue() << endl;
  ptr->writeValue(10);
  cout << "ptr = " << ptr->getValue() << endl;
}
